//
//  main.cpp
//  Espia
//
//  Created by Sebastian  Galindo on 16/07/12.
//  Copyright (c) 2012 DYPRE. All rights reserved.
//

#include <iostream>

using namespace std;

int main()
{
    ////////////Variables para el programa////////////
    /**/  unsigned char Matriz_de_Cifrado[200][200],Pocision_Actual ;
    /**/  unsigned int Columnas,Filas,Limite_Superior,Limite_Inferior,Limite_Derecho,Limite_Izquierdo,Cont_Char = 0;
    //  unsigned long;
    /**/  char Mensaje_Usuario [400];
    //  int;
    //  long;
    ////////////////////////////////////////////////////
    system("clear");
    
    cout << "Mensaje a descifrar es : " << endl;
    cin.getline(Mensaje_Usuario,400);
    cout << "Introduce C" <<endl;
    cin  >> Columnas;
    cout << "Introduce R" <<endl;
    cin  >> Filas;
    system("clear");
    /**************************************************************/
    // En el seguiente bloque se aplica la llave de decodificacion//
    /*  for(unsigned int a = 0; a <= sizeof(Mensaje_Usuario);a++)
     {
     if(Mensaje_Usuario[a] == '\0')
     {
     break;
     }
     Cont_Char++;
     Mensaje_Usuario[a] -= 7;
     
     }*/
    /*****************************************************************/
    /////////////Aqui se Forma la Matiz de decodifiacion //////////
    Limite_Derecho      =   Columnas ;
    Limite_Izquierdo    =   1        ;
    Limite_Superior     =   Filas    ;
    Limite_Inferior     =   1        ;
    Pocision_Actual     =   0        ;
    while(/*(Limite_Derecho > Limite_Izquierdo) && (Limite_Superior > Limite_Inferior)*/(Pocision_Actual)!= (Filas*Columnas))
    {
        /*****************************************Recorrido hacia la Izquierda*************************************/      
        /*******/   for(unsigned char a = Limite_Izquierdo ;a <= Limite_Derecho; a++,Pocision_Actual++)    /*******/
        /*******/      {                                                                                   /*******/
            /*******/          Matriz_de_Cifrado[Limite_Inferior][a]    =   Mensaje_Usuario[Pocision_Actual];  /*******/
            /*******/      }                                                                                   /*******/
        /**********************************************************************************************************/      
        Limite_Inferior++;
        for(unsigned char a = (Limite_Inferior) ;a <= Limite_Superior; a++,Pocision_Actual++)
        {
            Matriz_de_Cifrado[a][Limite_Derecho]    =   Mensaje_Usuario[Pocision_Actual];
        }
        Limite_Derecho--;
        for(unsigned char a = Limite_Derecho;a >= Limite_Izquierdo; a--,Pocision_Actual++)
        {
            Matriz_de_Cifrado[Limite_Superior][a]    =   Mensaje_Usuario[Pocision_Actual];
        }
        Limite_Superior--;
        for(unsigned char a = (Limite_Superior) ;a >= Limite_Inferior; a--,Pocision_Actual++)
        {
            Matriz_de_Cifrado[a][Limite_Izquierdo]    =   Mensaje_Usuario[Pocision_Actual];
        }
        Limite_Izquierdo++;
        
        
    }
    cout << "El Mensaje es " << endl;
    Pocision_Actual = 0;
    for(unsigned char a = 1 ;a <=  Filas ; a++)
    {
        for(unsigned char b = 1 ;b <= Columnas ; b++,Pocision_Actual++)
        {
            //cout << Mensaje_Usuario[b];
            cout << Matriz_de_Cifrado [a][b];
            Mensaje_Usuario[Pocision_Actual] = Matriz_de_Cifrado [a][b];
        }
        cout << endl;
        co
    }
    return 0;
}
